package com.youlai.jdk;

import org.junit.jupiter.api.Test;

import java.text.NumberFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

/**
 * Java12新增特性
 * Switch 表达式：可以使用 Lambda 表达式风格的 Switch 表达式，支持返回值，并且可以匹配多个值。
 * Compact Number Formatting：支持紧凑的数字格式化，可以更方便地处理大数字。
 * Teeing Collector：可以使用一个收集器将流分成两个部分处理，然后将这两个部分的结果合并。
 * Shenandoah 垃圾收集器的增强：Shenandoah 垃圾收集器受到了一些增强，包括对多处理器系统的支持和更好的调试支持。
 * Unicode 11 支持：Java 12 支持 Unicode 11.0，包括新增的字符和符号。
 * 在 Javadoc 中使用 HTML5 标记
 * @author zc
 * @date 2023-03-25 19:37
 */
public class Java12 {

    /**
     * Switch 表达式的使用
     */
    @Test
    public void switchExpression() {
        int day = 3;
        String dayType = switch (day) {
            case 1, 2, 3, 4, 5 -> "Weekday";
            case 6, 7 -> "Weekend";
            default -> "Invalid day";
        };
        System.out.println(dayType);
    }

    /**
     * Compact Number Formatting的使用
     */
    @Test
    public void compactNumberFormatting() {
        NumberFormat nf = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
        System.out.println(nf.format(1000)); // 输出 1K
        System.out.println(nf.format(1000000)); // 输出 1M
    }

    /**
     * Teeing Collector的使用
     */
    @Test
    public void teeingCollector() {
        List<String> list = Arrays.asList("Java", "Python", "C++", "JavaScript");
        String result = list.stream()
                .collect(Collectors.teeing(
                        Collectors.joining(", "),
                        Collectors.joining(" | "),
                        (s1, s2) -> s1 + " / " + s2
                ));
        System.out.println(result);
    }

    /**
     * Shenandoah 垃圾收集器的增强的使用
     * 启用 Shenandoah 垃圾收集器
     * java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC Main.java
     */
    @Test
    public void shenandoahGarbageCollectorEnhancement() {
        final String name = "John";
        // 常量表达式可以在编译时计算
        final String greeting = name + ", welcome!";
        System.out.println(greeting);
        System.out.println("\uD83D\uDE00"); // 输出笑脸表情
    }
    // 在 Javadoc 中使用 HTML5 标记
/**
 * <p>This is a paragraph.</p>
 * <ul>
 *     <li>Item 1</li>
 *     <li>Item 2</li>
 *     <li>Item 3</li>
 * </ul>
 */


}
